//package com.bsj.power.sdk.config.hksdk;
//
//import com.bsj.power.common.util.ExceptionUtil;
//import com.bsj.power.sdk.config.hksdk.Common.osSelect;
//import com.sun.jna.Native;
//import com.sun.jna.Pointer;
//import lombok.extern.slf4j.Slf4j;
//
///**
// * @author yinhao
// * @version 1.0
// * @description main方法本地测试SDK
// * @date 2024/8/30
// */
//@Slf4j
//public class MainClientManage {
//
//    public static HCNetSDK netSDK = null;
//    public static PlayCtrl playCon = null;
//    public static HKSDKClientManage.FExceptionCallBack_Imp fExceptionCallBack;
//
//    /**
//     * 用户句柄
//     */
//    public static int lUserID = -1;
//    /**
//     * 预览通道号
//     */
//    public static int lDChannel;
//
//    static class FExceptionCallBack_Imp implements HCNetSDK.FExceptionCallBack {
//        @Override
//        public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) {
//            log.error("异常事件类型: {}", dwType);
//            return;
//        }
//    }
//
//    public static boolean init(String dllPath) {
//        if (netSDK == null && playCon == null) {
//            if (!createSDKInstance(dllPath)) {
//                log.error("Load SDK fail");
//                return false;
//            }
//            if (!createPlayInstance(dllPath)) {
//                log.error("Load PlayCtrl fail");
//                return false;
//            }
//        }
//        //SDK初始化，一个程序只需要调用一次
//        boolean initSuc = netSDK.NET_DVR_Init();
//
//        //异常消息回调
//        if (fExceptionCallBack == null) {
//            fExceptionCallBack = new HKSDKClientManage.FExceptionCallBack_Imp();
//        }
//        Pointer pUser = null;
//        if (!netSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) {
//            return false;
//        }
//        log.info("HKSDK设置异常消息回调成功");
//
//        //启动SDK写日志
//        netSDK.NET_DVR_SetLogToFile(3, "./mainSdkLog", false);
//        login_V40("192.168.130.64", (short) 8000, "admin", "Qq123456");
//        return true;
//    }
//
//    /**
//     * 动态加载库文件
//     *
//     * @return
//     */
//    private static boolean createSDKInstance(String dllPath) {
//        if (netSDK == null) {
//            synchronized (HCNetSDK.class) {
//                String strDllPath = "";
//                try {
//                    if (osSelect.isWindows()) {
//                        //win系统加载库路径
//                        strDllPath = dllPath + "\\hksdk\\lib\\HCNetSDK.dll";
//                    } else if (osSelect.isLinux()) {
//                        //Linux系统加载库路径
//                        strDllPath = dllPath + "/hksdk/lib/libhcnetsdk.so";
//                    }
//                    netSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
//                } catch (Exception ex) {
//                    log.error("loadLibrary: {}, Error: {}", strDllPath, ExceptionUtil.getStackStr(ex));
//                    return false;
//                }
//            }
//        }
//        return true;
//    }
//
//    /**
//     * 播放库加载
//     *
//     * @return
//     */
//    private static boolean createPlayInstance(String dllPath) {
//        if (playCon == null) {
//            synchronized (PlayCtrl.class) {
//                String strPlayPath = "";
//                try {
//                    if (osSelect.isWindows()) {
//                        //win系统加载库路径
//                        strPlayPath = dllPath + "\\hksdk\\lib\\PlayCtrl.dll";
//                    } else if (osSelect.isLinux()) {
//                        //Linux系统加载库路径
//                        strPlayPath = dllPath + "/hksdk/lib/libPlayCtrl.so";
//                    }
//                    playCon = (PlayCtrl) Native.loadLibrary(strPlayPath, PlayCtrl.class);
//
//                } catch (Exception ex) {
//                    log.error("loadLibrary: {}, Error: {}", strPlayPath, ExceptionUtil.getStackStr(ex));
//                    return false;
//                }
//            }
//        }
//        return true;
//    }
//
//    public static void login_V40(String ip, short port, String user, String psw) {
//        //注册
//        //设备登录信息
//        HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
//        //设备信息
//        HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
//
//        //设备ip地址
//        String m_sDeviceIP = ip;
//        m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
//        System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
//
//        //设备用户名
//        String m_sUsername = user;
//        m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
//        System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
//
//        //设备密码
//        String m_sPassword = psw;
//        m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
//        System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
//
//        m_strLoginInfo.wPort = port;
//        //是否异步登录：0- 否，1- 是
//        m_strLoginInfo.bUseAsynLogin = false;
//        //0- SDK私有协议，1- ISAPI协议
//        m_strLoginInfo.byLoginMode = 0;
//        m_strLoginInfo.write();
//
//        lUserID = netSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
//        if (lUserID == -1) {
//            log.warn("登录失败，错误码为: {}", netSDK.NET_DVR_GetLastError());
//            return;
//        } else {
//            log.info("设备登录成功！ IP: {}", ip);
//            //相机一般只有一个通道号，热成像相机有2个通道号，通道号为1或1,2
//            //byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值
//            if ((int) m_strDeviceInfo.struDeviceV30.byStartDChan == 1 && (int) m_strDeviceInfo.struDeviceV30.byStartDChan == 33) {
//                //byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值,NVR起始通道号一般是33或者1开始
//                lDChannel = m_strDeviceInfo.struDeviceV30.byStartDChan;
//                log.info("预览起始通道号： {}", lDChannel);
//            }
//            return;
//        }
//    }
//
//    public static void main(String[] args) {
//        init("D:\\work-other\\CN-Power\\power-modules\\module-sdk");
//        //实时取流
//        VideoDemo.realPlay(lUserID,1);
//    }
//}
